from pylgs.all import *Polychromatic LGS
A multi-level sodium system excited by 330 nm light
Define a LGS system pumped by 330 nm light:
lgs = LGSSystem(
'Na330',
{
'IntensitySI1': 5000.,
'BFieldG': 0.5,
'EllipticityDegrees1': 45.,
'PolarizationAngleDegrees1': 0,
'DetuningHz1': 1.0832e9,
'LaserWidthHz1': 10.0e6,
'MagneticZenithDegrees': 45.,
'MagneticAzimuthDegrees': 45.,
'SDampingCollisionRatePerS': 4081.63,
'BeamTransitRatePerS': 131.944,
'VccRatePerS': 28571.,
'TemperatureK': 185.,
'RecoilParameter': 1.
}
)The system is made up of 774 density-matrix elements describing 7 atomic levels:
lgs.level_population.range
{Level(7) ⨉ Density matrix (source)(774)}
HTML(', '.join(lgs.level_population.range.coords['Level'].data))
3D5/2, 3S1/2, 3P1/2, 4P3/2, 4S1/2, 3D3/2, 3P3/2
Steady-state model
Adaptively refine velocity groups
Build a steady-state model with adaptively refined velocity groups:
model = lgs.adaptive_stationary_model({}, max_weight=0.02)Solve for the density matrix. There are 77 velocity groups in the model:
sol = model.solve()
sol
{Atomic velocity(77) ⨉ Density matrix (source)(774), }
Plot the total return flux for each transition as a bar chart:
model.total_flux(sol).visualize()Plot the flux as a function of velocity:
model.flux_distribution(sol).visualize(xaxis_range=(-1, 2))Transient dynamics model
Build a model for the transient dynamics:
model = lgs.instationary_model(
vg=model.data['velocity_groups'],
T=1e-6,
num_values=101
)Set tolerances for the BDF solver:
pymor.basic.set_defaults({
'pylgs.pymor.timestepping.cvode_solver_options.cvode_bdf_atol': 1e-6,
'pylgs.pymor.timestepping.cvode_solver_options.cvode_bdf_rtol': 1e-5,
})Solve for the density matrix as a function of time:
sol = model.solve()Plot the return flux for each transition:
model.total_flux(sol).visualize()Animate the level population distribution as a function of time:
model.level_population_distribution(sol).visualize(xaxis_range=(-.25, 2), yaxis_range=(0, .045))lgs.Flux
Flux{DM(774)} → {Tr(11)}